Computer systems typically include a combination of hardware (e.g., semiconductors, circuit boards, etc.) and computer programs. As advances in semiconductor processing and computer architecture push the performance of the computer hardware higher, more sophisticated computer programs have evolved to take advantage of the higher performance of the hardware, resulting in computer systems today that are much more powerful than just a few years ago. One advance in computer technology is the development of parallel processing, i.e., the performance of multiple tasks in parallel.
A number of computer technologies have been developed to facilitate increased parallel processing. From a hardware standpoint, computers increasingly rely on multiple microprocessors to provide increased workload capacity. From a program standpoint, multithreaded operating systems and kernels have been developed, which permit computer programs to execute in multiple threads, so that multiple tasks can essentially be performed concurrently. In addition, some computers implement the concept of logical partitioning, where a single physical computer operates essentially like multiple and independent virtual computers, referred to as logical partitions. Each logical partition executes a separate operating system, and from the perspective of users and of the applications executing in the logical partition, operates as a fully independent computer. The various resources in the physical computer are allocated among the various logical partitions via a partition manager, or hypervisor. The resources may include processors, adapters, input/output devices, network bandwidth, and memory.
The physical memory of a computer system is typically allocated among various logical partitions using a technique known as virtual memory. Virtual memory gives each logical partition the impression or view that it is accessing contiguous memory within a range of contiguous virtual addresses, also known as an address space, but in fact the memory pieces that the partition accesses are physically fragmented and non-contiguous, meaning that they are scattered at various locations at non-contiguous physical addresses in the physical memory and may overflow to secondary storage, such as disk drives, which are typically larger and slower than memory. Virtual memory can make programming of applications within the partition easier and can make the use of physical memory more efficient.